'use strict';

/**
 * 角色管理控制器
 */
const Controller = require('egg').Controller;

class RoleController extends Controller {
  /**
   * 创建角色
   * @return {Promise<void>}
   */
  async create() {
    const { ctx, service } = this;
    const roleData = ctx.request.body;
    const result = await service.role.create(roleData);
    ctx.success(result);
  }

  /**
   * 查询角色列表
   * @return {Promise<void>}
   */
  async index() {
    const { ctx, service } = this;
    const { page = 1, pageSize = 10, ...query } = ctx.query;
    const result = await service.role.list(query, Number(page), Number(pageSize));
    ctx.success(result);
  }

  /**
   * 查询单个角色
   * @return {Promise<void>}
   */
  async show() {
    const { ctx, service } = this;
    const { id } = ctx.params;
    const result = await service.role.findById(id);
    ctx.success(result);
  }

  /**
   * 更新角色
   * @return {Promise<void>}
   */
  async update() {
    const { ctx, service } = this;
    const { id } = ctx.params;
    const roleData = ctx.request.body;
    const result = await service.role.update(id, roleData);
    ctx.success(result);
  }

  /**
   * 删除角色
   * @return {Promise<void>}
   */
  async destroy() {
    const { ctx, service } = this;
    const { id } = ctx.params;
    await service.role.destroy(id);
    ctx.success(null, '删除成功');
  }

  /**
   * 更新角色状态
   * @return {Promise<void>}
   */
  async updateStatus() {
    const { ctx, service } = this;
    const { id, status } = ctx.request.body;
    await service.role.updateStatus(id, status);
    ctx.success(null, '状态更新成功');
  }

  /**
   * 为用户分配角色
   * @return {Promise<void>}
   */
  async assignRoles() {
    const { ctx, service } = this;
    const { userId, roleCodes } = ctx.request.body;
    await service.role.assignRoles(userId, roleCodes);
    ctx.success(null, '角色分配成功');
  }

  /**
   * 获取用户的角色列表
   * @return {Promise<void>}
   */
  async getUserRoles() {
    const { ctx, service } = this;
    const { userId } = ctx.query;
    const result = await service.role.getUserRoles(userId);
    ctx.success(result);
  }

  /**
   * 批量删除角色
   * @return {Promise<void>}
   */
  async batchDestroy() {
    const { ctx, service } = this;
    const { ids } = ctx.request.body;
    await service.role.batchDestroy(ids);
    ctx.success(null, '批量删除成功');
  }

  /**
   * 获取所有角色（不分页）
   * @return {Promise<void>}
   */
  async getAllRoles() {
    const { ctx, service } = this;
    const result = await service.role.getAllRoles();
    ctx.success(result);
  }
}

module.exports = RoleController;
